#include <stdio.h>

#include "nuclei_sdk_hal.h"

#define GPIO_NUM  8

static uint32_t GPIO_RISE_INT[] = {0,1,2,3,4,5,6,7};
static uint32_t GPIO_FALL_INT[] = {8,9,10,11,12,13,14,15};
static uint32_t GPIO_HIGH_INT[] = {16,17,18,19,20,21,22,23};
static uint32_t GPIO_LOW_INT[] = {24,25,26,27,28,29,30,31};

static uint32_t GPIO_E_HIGH_INT[] = {0,1,2};

int gpio3_irq_count=0;
int gpio9_irq_count=0;
int gpio18_irq_count=0;
int gpio31_irq_count=0;
int gpio34_irq_count=0;

void gpio3_handler(void)
{  
    printf("Enter gpio3_handler\r\n");
    gpio_clear_interrupt(GPIO,(0x1<<3),GPIO_INT_RISE);
}

void gpio4_handler(void)
{  
    printf("Enter gpio4_handler\r\n");
    gpio_clear_interrupt(GPIO,(0x1<<4),GPIO_INT_FALL);
}

void gpio5_handler(void)
{  
    printf("Enter gpio5_handler\r\n");
    gpio_clear_interrupt(GPIO,(0x1<<5),GPIO_INT_HIGH);
}

void gpio6_handler(void)
{  
    printf("Enter gpio6_handler\r\n");
    gpio_clear_interrupt(GPIO,(0x1<<6),GPIO_INT_LOW);
}


void gpio_config(void)
{
    gpio_enable_interrupt(GPIO,(0x1<<3),GPIO_INT_RISE);
    gpio_set_soft_interrupt(GPIO,(0x1<<3),GPIO_INT_RISE);

    gpio_enable_interrupt(GPIO,(0x1<<4),GPIO_INT_FALL);
    gpio_set_soft_interrupt(GPIO,(0x1<<4),GPIO_INT_FALL);

    gpio_enable_interrupt(GPIO,(0x1<<5),GPIO_INT_HIGH);
    gpio_set_soft_interrupt(GPIO,(0x1<<5),GPIO_INT_HIGH);


    // gpio_enable_interrupt(GPIO,(0x1<<6),GPIO_INT_LOW);
    // gpio_set_soft_interrupt(GPIO,(0x1<<6),GPIO_INT_LOW);
}



int main(void)
{  
    printf("config start \r\n");
    __enable_irq();
	ECLIC_Register_IRQ(GPIO3_IRQn, ECLIC_NON_VECTOR_INTERRUPT,
                                    ECLIC_LEVEL_TRIGGER, 1, 1,
                                    gpio3_handler);

    ECLIC_Register_IRQ(GPIO4_IRQn, ECLIC_NON_VECTOR_INTERRUPT,
                                    ECLIC_LEVEL_TRIGGER, 1, 1,
                                    gpio4_handler);

    ECLIC_Register_IRQ(GPIO5_IRQn, ECLIC_NON_VECTOR_INTERRUPT,
                                    ECLIC_LEVEL_TRIGGER, 1, 1,
                                    gpio5_handler);


    ECLIC_Register_IRQ(GPIO6_IRQn, ECLIC_NON_VECTOR_INTERRUPT,
                                    ECLIC_LEVEL_TRIGGER, 1, 1,
                                    gpio6_handler);



    gpio_config();
    printf("config finish \r\n");
    while(1);
    

}
